<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

namespace Agp\CoreBundle\Entity;

use Sylius\Bundle\CartBundle\Entity\Cart as BaseCart;
use Sylius\Bundle\CartBundle\Model\CartInterface;
use Doctrine\Common\Collections\Collection;
use APY\DataGridBundle\Grid\Mapping as GRID;
use Agp\CoreBundle\Entity\FormaPagamento;
use Symfony\Component\Validator\Constraints as Assert;
use Agp\CoreBundle\Entity\ListaPreco;
use Agp\CoreBundle\Entity\Pedido;

use Doctrine\ORM\Mapping as ORM;

/**
 * Description of Pedido
 *
 * @author bondcs
 * @ORM\Table(name="pedido_site")
 * @ORM\Entity(repositoryClass="Agp\CoreBundle\Repository\PedidoSiteRepository")
 * @ORM\HasLifecycleCallbacks
 * 
 * @GRID\Source(groups="agape", groupBy="pedido.codPedido", columns="codPedidoSite, pedido.codPedido, items.evento.info.descricao, formaPagamento.descricao, pedido.dtPedido, pedido.situacao, usuario.nome, items.subtotal:sum")
 * @GRID\Source(groups="usuario", groupBy="pedido.codPedido", columns="codPedidoSite, pedido.codPedido, pedido.formaPagamento.descricao, pedido.dtPedido, pedido.situacao, items.subtotal:sum")
 * 
 */
class PedidoSite{
    
    /**
     * @var integer $id
     *
     * @ORM\Column(name="cod_pedido_site", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     * @GRID\Column(title="Código", type="text", size="5", primary=true, visible=false, align="center")
     */
    protected $codPedidoSite;
    
    /**
     * 
     * @ORM\ManyToOne(targetEntity="Agp\CoreBundle\Entity\Usuario", fetch="LAZY")
     * @ORM\JoinColumn(name="cod_usuario", referencedColumnName="id", nullable=true)
     * @GRID\Column(field="usuario.nome", title="Nome", type="text", align="center")
     */
    protected $usuario;
    
    /**
     * 
     * @ORM\OneToOne(targetEntity="Agp\CoreBundle\Entity\Pedido", fetch="LAZY", cascade={"all"}, inversedBy="pedidoSite")
     * @ORM\JoinColumn(name="cod_pedido", referencedColumnName="cod_pedido", nullable=true, onDelete="Cascade")
     * 
     * @GRID\Column(field="pedido.codPedido", title="Código", type="text", size="5", align="center")
     * @GRID\Column(field="pedido.dtPedido", title="Data de entrada", type="datetime", align="center")
     * @GRID\Column(field="pedido.situacao", groups="usuario", title="Situação", type="text", align="center", filter="select", selectFrom="values", values={"1"="Seu pedido foi realizado","2"="Seu pedido foi cancelado", "3"="Aguardando análise de crédito", "4"="Análise de Crédito aprovada", "5"="Aguardando Aprovação de Pagamento", "6"="O pagamento de seu pedido foi confirmado"})
     * @GRID\Column(field="pedido.situacao", groups="agape", visible=false)
     * @GRID\Column(size="30", field="pedido.formaPagamento.descricao", title="Forma de pagamento", type="text", align="center")
     * 
     */
    protected $pedido;
    
    /**
     *
     * @ORM\OneToMany(targetEntity="PedidoSiteItem", mappedBy="pedidoSite", cascade={"all"}, orphanRemoval=true)
     * 
     * @Grid\Column(align="center", type="number", style="currency", field="items.subtotal:sum", title="Valor")
     * @Grid\Column(field="items.evento.info.descricao", type="text", title="Evento", size=200)
     */
    protected $items;
    
    /**
     * @ORM\OneToOne(targetEntity="Agp\CoreBundle\Entity\Boleto", cascade={"persist"})
     * @ORM\JoinColumn(name="cod_boleto", referencedColumnName="cod_boleto", onDelete="Cascade", nullable=true)
     * @var object
     */
    protected $boleto;
    
    /**
     *
     * @var datetime
     * 
     * @ORM\Column(name="dt_vencimento", type="datetime", nullable=true)
     * 
     * @Assert\NotBlank(groups={"Boleto"})
     */
    protected $dtVencimento;
    
    public function __construct() {
        $this->items = new \Doctrine\Common\Collections\ArrayCollection();
        $this->boletoPgtoConfirmado = false;
    }

    public function isLocked(){
        return $this->locked;
    }
    
    
    public function getValorTotal(){
        $total = 0;
        foreach ($this->items as $item){
            $total += $item->getSubtotal();
        }
        
        return $total;
        
    }
    
    public function getItemsCustom() {
        $itens = array();
        
        $itemArray['codEvento'] = $this->pedido->getEvento()->getCodEvento();
        $itemArray['descricao'] = $this->pedido->getEvento()->getInfo()->getDescricao();
        
        foreach ($this->items as $i){
            
            $itemArray['qtde'] = $i->getQtdItem();
            if ($i->getListaPreco()->getTipo() == ListaPreco::TP_PASSAPORTE){
                
                $cod = $i->getListaPreco()->getCodListaPreco();
                
                if (!isset($itens[$cod]['vlrUnitario']))
                    $itens[$cod]['vlrUnitario'] = 0;
                
                if (!isset($itens[$cod]['vlrTotal']))
                    $itens[$cod]['vlrTotal'] = 0;
                
                
                $itemArray['nome'] = $i->getListaPreco()->getNome();
                $itemArray['vlrUnitario'] = $itens[$cod]['vlrUnitario'] + $i->getVlrItem();
                $itemArray['vlrTotal'] = $itens[$cod]['vlrTotal'] + $i->getSubtotal();
                
                
                $itens[$cod] = $itemArray;
                
            }elseif ($i->getListaPreco()->getTipo() == ListaPreco::TP_SETOR){
                $itemArray['nome'] = $i->getListaPreco()->getLabelForSetor().': '.$i->getProduto()->getNome();
                $itemArray['vlrUnitario'] = $i->getVlrItem();
                $itemArray['vlrTotal'] = $i->getSubtotal();
                $itens[] = $itemArray;
                
            }else{
                $itemArray['nome'] = $i->getProduto()->getNome();
                $itemArray['vlrUnitario'] = $i->getVlrItem();
                $itemArray['vlrTotal'] = $i->getSubtotal();
                $itens[] = $itemArray;
            }
        }
        
        return $itens;
   }
    
   public function getItemsComuns() {
        $itens = array();
        foreach ($this->items as $i){
            if ($i->getListaPreco()->getTipo() == ListaPreco::TP_COMUM){
                $itens[] = $i;
            }
        }
        
        return $itens;
    }
    
    public function getItemsPassaportes() {
        $itens = array();
        foreach ($this->items as $i){
            if ($i->getListaPreco()->getTipo() == ListaPreco::TP_PASSAPORTE){
                $itens[$i->getEvento()->getCodEvento()][] = $i;
            }
        }
        
        return $itens;
    }
    
    public function getItemsSetores() {
        $itens = array();
        foreach ($this->items as $i){
            if ($i->getListaPreco()->getTipo() == ListaPreco::TP_SETOR){
                $itens[] = $i;
            }
        }
        
        return $itens;
    }
    
    /**
     * @ORM\PrePersist
     */
    public function setDtVencimentoByEvento(){
        $dtAtual = new \DateTime; 
        $dtAtual->setTime(12, 0, 0);
        $dtAtual->add(new \DateInterval('P2D'));
        $this->dtVencimento = $dtAtual;
    }

    /**
     * @ORM\PrePersist
     * @ORM\PreUpdate
     */
    public function resetVencimento(){
        if ($this->getPedido()->getFormaPagamento() != FormaPagamento::F_BOLETO){
            $this->dtVencimento = null;
        }
    }
    
    public function getCodPedidoSite() {
        return $this->codPedidoSite;
    }

    public function setCodPedidoSite($codPedidoSite) {
        $this->codPedidoSite = $codPedidoSite;
    }

    public function getUsuario() {
        return $this->usuario;
    }

    public function setUsuario($usuario) {
        $this->usuario = $usuario;
    }
    
    public function addItem($item){
        $this->items[] = $item;
    }

    public function getItems() {
        return $this->items;
    }

    public function setItems($items) {
        $this->items = $items;
    }

    public function getBoleto() {
        return $this->boleto;
    }

    public function setBoleto($boleto) {
        $this->boleto = $boleto;
    }

    public function getDtVencimento() {
        return $this->dtVencimento;
    }

    public function setDtVencimento($dtVencimento) {
        $this->dtVencimento = $dtVencimento;
    }

    public function getVendas() {
        return $this->vendas;
    }

    public function setVendas($vendas) {
        $this->vendas = $vendas;
    }

    public function getPedido() {
        return $this->pedido;
    }

    public function setPedido($pedido) {
        $this->pedido = $pedido;
    }
    
    public function getBoletoPgtoConfirmado() {
        return $this->boletoPgtoConfirmado;
    }

    public function setBoletoPgtoConfirmado($boletoPgtoConfirmado) {
        $this->boletoPgtoConfirmado = $boletoPgtoConfirmado;
    }
  
    public function getSituacaes(){
        $return = array();
        
        $return[1] = array('label' => $this->pedido->getSituacaoText(Pedido::SIT_PEDIDO_REALIZADO), 'img' => 'Valid');
        
        if ($this->pedido->getSituacao() == Pedido::SIT_PEDIDO_CANCELADO){
            $return[2] = array('label' => $this->pedido->getSituacaoText(Pedido::SIT_PEDIDO_CANCELADO), 'img' => 'Denided');
            
            return $return;
        }
        
        if ($this->formaPagamento->getDescricao() == FormaPagamento::F_BOLETO){
            
            if ($this->pedido->getSituacao() >= Pedido::SIT_APROVACAO_PGTO){
                $return[2] = array('label' => $this->pedido->getSituacaoText(Pedido::SIT_APROVACAO_PGTO), 'img' => 'Warning');
            }
            
            if ($this->pedido->getSituacao() >= Pedido::SIT_PGTO_CONFIRMADO){
                $return[3] = array('label' => $this->pedido->getSituacaoText(Pedido::SIT_PGTO_CONFIRMADO), 'img' => 'Valid');
            }
            
        }else{
            
            if ($this->pedido->getSituacao() >= Pedido::SIT_ANALIZE_CREDITO){
                $return[2] = array('label' => $this->pedido->getSituacaoText(Pedido::SIT_ANALIZE_CREDITO), 'img' => 'Warning');
            }
            
            if ($this->pedido->getSituacao() >= Pedido::SIT_ANALIZE_APROVADA){
                $return[3] = array('label' => $this->pedido->getSituacaoText(Pedido::SIT_ANALIZE_APROVADA), 'img' => 'Valid');
            }
            
            if ($this->pedido->getSituacao() >= Pedido::SIT_APROVACAO_PGTO){
                $return[4] = array('label' => $this->pedido->getSituacaoText(Pedido::SIT_APROVACAO_PGTO), 'img' => 'Warning');
            }
            
            if ($this->pedido->getSituacao() >= Pedido::SIT_PGTO_CONFIRMADO){
                $return[5] = array('label' => $this->pedido->getSituacaoText(Pedido::SIT_PGTO_CONFIRMADO), 'img' => 'Valid');
            }
            
        }
        
        return $return;

    }

}

?>